<?php

/**
 * Model_User
 * 
 * Đối tượng model làm việc với dữ liệu của bảng user
 * 
 * @package    Model
 * @author     Windy
 * @version    0.2
 */
class Model_User extends Zend_Db_Table_Abstract
{
	protected  $_name = "user";
	//protected  $_dependentTables = array("Model_Post");
	
	/**
	 * Lấy toàn bộ bản ghi user
	 * @return Zend_Db_Table_Rowset
	 */
	public function getAllUser(){
		return $this->fetchAll();
	}
	
	/**
	 * Tìm toàn user theo user id
	 * @return Zend_Db_Table_Row
	 */
	public function  getUserByID($user_id){
		return $this->find($user_id)->current();
	}
	/**
	 * Tìm toàn user theo role
	 * @param int $role Vai trò
	 * @return Zend_Db_Table_Row
	 */
	public function getUserByRole($role){
		return $this->fetchAll($this->select()->where('role ='.$role ));
	}
	/**
	 * Đếm số lượng user có trong csdl
	 * @return int
	 */
	public function countUser(){
		return $this->fetchAll()->count();
	}
	/**
	 * 
	 * Tạo người dùng mới
	 * @param string $username Tên người dùng
	 * @param string $password Mật khẩu đăng nhập
	 * @param string $fullname Tên họ đầy đủ
	 * @param string $email Email người dùng
	 * @param string $phone Số điện thoại
	 * @param int $role Vai trò của người dùng
	 * @return int Mã tự tăng
	 */
	public function createUser($username, $password, $fullname, $email, $phone, $fax, $image, $role){
		try{
			$user = $this->createRow();
			$user->username = $username;
			$user->password = md5($password);
			$user->fullname = $fullname;
			$user->email = $email;
			$user->phone = $phone;
			$user->fax = $fax;
			$user->image = $image;
			$user->role = $role;
			$user->save();
			return $this->_db->lastInsertId();
		}catch(Exception $ex){
			echo $ex->getMessage();
			return false;
		}
	}
	/**
	 * 
	 * Update thông tin người dùng bao gồm cả mật khẩu
	 * @param int $id Mã người dùng
	 * @param string $username Tên người dùng
	 * @param string $password Mật khẩu đăng nhập
	 * @param string $fullname Tên họ đầy đủ
	 * @param string $email Email người dùng
	 * @param string $phone Số điện thoại
	 * @param int $role Vai trò của người dùng
	 * @return int Số bản ghi updated
	 */
	public function updateUser($id, $username, $password, $fullname, $email, $phone, $fax, $image, $role){
		try{
			//chuẩn bị dữ liệu
			if($password == ""){
				$data = array(
						'username' => $username,
						'fullname' => $fullname,
						'email' => $email,
						'phone' => $phone,
						'fax'	=> $fax,
						'image' => $image,
						'role' => $role
				);
			}else{		
				$data = array(
							'username' => $username,
							'password' => md5($password),
							'fullname' => $fullname,
							'email' => $email,
							'phone' => $phone,
							'fax'	=> $fax,
							'image' => $image,
							'role' => $role
				);
			}
			$this->update($data, 'id = '.$id);
			return true;
		}catch(Exception $ex){
			echo $ex->getMessage();
			return false;
		}
		
	}
	/**
	 * 
	 * Xóa 1 hoặc nhiều user phụ thuộc vào id
	 * @param int|string $id
	 * @return int Số bản ghi bị xóa
	 */
	public function deleteUser($id){
		try{
			if(is_numeric($id)){
				return $this->delete('id='.$id);
			}else{
				return $this->delete('id in ('.$id.')');
			}
		}catch(Exception $ex){
			echo $ex->getMessage();
			return false;
		}
	}
	/**
	 * 
	 * Đổi mật khẩu của user
	 * @param int $id Mã user
	 * @param string $password
	 */
	public function changePass($id, $password){
		try{
			return $this->update(array('password' => md5($password)), 'id = '.$id);
		}catch(Exception $ex){
			echo $ex->getMessage();
			return false;
		}
	}
}